/**
 *  最近今天阅读了一下jquery的源码，然后参考了jquery的结构，自己手写了一个简单的jquery的框架。
    实现了jquery的链式操作，函数扩展，选择器则是用了最新的querySelectorAll的函数。
    至于功能我就随便写了几个：addclass，click，siblings，html这个四个操作函数。
    jquery的主要是操作dom元素，jquery选择每次都会把选中dom元素存入this对象里，
    所有操作dom的函数，比如addclass,html之类的函数，都是放在原型里，然后每个函数return this，这样就实现了链式操作。
	jquery是具有插件机制的，可以自己扩展函数，类似于$.fn.xxx(函数名)=function(){},其实jquery只是把jquery这个函数的原型赋值给了$.fn，所以就实现了函数的扩展。

	我的代码写的比较简单，不过基础的jquery的结构还是实现了的。
 * 
 * 
 * 
 */

(function (window) {
    var SmhJquery = function (selector) {
        return new SmhJquery.fn.init(selector);
    };
    SmhJquery.fn = SmhJquery.prototype = {
        smhjquery: "3.4.1",
        css: function (selector) {

        },
    };
    var init = SmhJquery.fn.init = function (selector) {
        var attr = document.querySelectorAll(selector);
        for (var i = 0; i < attr.length; i++) {
            this[i] = attr[i];
        }
        this.length = attr.length;
        return this;
    }
    init.prototype = SmhJquery.fn;
    SmhJquery.fn.extend = function (obj) {
        for (var i in obj) {
            this[i] = obj[i];
        }
    };
    SmhJquery.fn.extend({
        each: function (callback) {
            for (var i = 0; i < this.length; i++) {
                callback.call(this, this[i]);
            }
            return this;
        },
        addclass: function (value) {
            return this.each(function (obj) {
                obj.classList.add(value);
            })
        },
        click: function (fn) {
            return this.each(function (obj) {
                addEvent(obj, "click", fn);
            })
        },
        siblings: function () {
            var doms = this[0].childNodes;
            if (doms.length > 0) {
                resetthis(this, doms);
                return this;
            }
        },
        html: function (value) {
            if (value == null) {
                //获取
                return this[0].outerHTML;
            } else {
                //设置
                return this.each(function (obj) {
                    obj.innerHTML = value;
                })
            }
        }
    });
    function resetthis(that, doms) {
        that.each(function (obj) {
            delete obj;
        })
        for (var i = 0; i < doms.length; i++) {
            that[i] = doms[i]
        };
        that.length = doms.length;
    }
    function addEvent(obj, event, fn) {//绑定事件
        obj.addEventListener(event, fn, false);
    }
    window.SmhJquery = window.$ = SmhJquery;
}(window));